{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以在[Bookshop.org](https://bookshop.org/a/98697/9781098155438) 和\n",
    "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)获取纸制版和电子版的*Think Python 3e*."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 前言"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 这本书面向谁?\n",
    "\n",
    "如果你想学习编程，你来对地方了。Python是初学者最好的编程语言之一，也是最需要的技能之一。\n",
    "\n",
    "你来的时间也恰好，因为现在学习编程可能比以往更简单。使用像GhatGPT的虚拟助手，你不再需要独自学习。通过这本书，我将提供使用这些工具加速学习的方法。\n",
    "\n",
    "这本书主要面向从来没有编程经验或者有其他编程语言经验的人。如果你的python经验丰富，你可能会觉得前几章很慢。\n",
    "\n",
    "学习编程的挑战之一就是你必须学习*两种*语言，一种是编程语言本身，一种是我们用来讨论关于编程的词汇。\n",
    "\n",
    "如果你只学习编程语言，你可能在解释错误信息，阅读文档，与其他人交流或者使用虚拟助理时出现问题；如果你学过编程，但没有学过这第二种语言，我希望这本书对你有用。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 本书目标\n",
    "\n",
    "在写这本书时，我尝试小心地使用词汇。我在每个术语首次出现时进行定义，在每章结尾有术语表总结引入的术语。\n",
    "\n",
    "我也尝试简要地进行说明。阅读本书所需的脑力越少，编程的能力就越强。\n",
    "\n",
    "但你不能只通过读书来学习编程，你需要练习。本书在每章结尾提供了一些练习，你可以用你所学的知识进行实践。\n",
    "\n",
    "如果你仔细阅读并坚持练习，你将取得进步。但我要警告你：学习编程并不容易，即使是经验丰富的程序员，编程也可能令人沮丧。\n",
    "\n",
    "在学习过程中，我将提供一些策略，帮助你写出正确的程序，并修复错误的程序。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 本书导航\n",
    "\n",
    "本书的每一章内容建立在前一章的基础上，因此你应该按顺序阅读，并花时间对之前的章节练习后再学习后续章节。\n",
    "\n",
    "前6章介绍基本的元素，如算术，条件和循环。前6章也将介绍编程中最重要的概念：函数，以及使用函数的强大方法：递归。\n",
    "\n",
    "第7章和第8章介绍字符串（可以表示字母，单词以及句子）以及处理字符串的算法。\n",
    "\n",
    "第9～12章介绍python的核心数据结构：列表，字典与元组。这些数据结构是编写高效程序的强大工具。\n",
    "\n",
    "第12章展示了分析文本以及随机生成新文本的算法，类似的算法是大语言模型(large language models，LLMs)的核心，因此本章将让你了解ChatGPT等工具的工作原理。\n",
    "\n",
    "第13章介绍长期存储数据的方法：文件和数据库。作为练习，你可以编写程序，搜索文件系统并寻找重复的文件。\n",
    "\n",
    "第14～17章介绍面向对象编程(object-oriented programming，OOP)，这是一种组织代码和数据的方式。许多python库由面向对象风格编写而成，因此这几章将帮助你理解他们的设计思路，并帮助你定义自己的对象。\n",
    "\n",
    "本书的目标不是覆盖整个python语言。相反，我专注于语言的子集，用最少的概念提供最强大的功能。然而，python有许多特性，能让你高效地解决常见问题。第18章展示了部分特性。\n",
    "\n",
    "最后，第19章展示了我对你继续编程之旅的一些个人思考和建议。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第3版有什么新内容?\n",
    "\n",
    "在这一版，最大的改变由两种新技术驱动：Jupyter笔记以及虚拟助手。\n",
    "\n",
    "本书的每一章是一个Jupyter笔记，这种文档同时包含普通文本以及代码。对我而言，这让写代码，测试，以及与文本保持一致更加简单。对读者而言，这可以让你在一个地方运行代码，修改代码，并进行练习。使用Jupyter笔记的方法在第一章介绍。\n",
    "\n",
    "另一个较大的变化在于我增加了使用类似ChatGPT的虚拟助手加速学习的建议。本书第2版出版于2016年，这些工具的前身难堪大用，多数人并不知道它们。如今它们成为软件工程的基本工具，我认为它们将成为学习编程和许多其他事物的工具。\n",
    "\n",
    "\n",
    "其他变化来自第2版的一些遗憾。\n",
    "\n",
    "首先我没有强调软件测试。在2016年这就已经是令人遗憾的遗漏了，在虚拟助手的出现之后，自动化测试也变得更加重要。因此这一版展示了python最广泛使用的测试工具：`doctest`及`unittest`，并引入了几个相关练习。\n",
    "\n",
    "其次，第2版的练习分布不平衡，有些比其他练习更有趣，而有些练习太难了。迁移到Jupyter笔记后，我开发了测试了更加吸引人和更高效的练习序列。\n",
    "\n",
    "在这次修订中，讨论话题的顺序基本一致，但我对少数章节进行了重排，并将两个简短的章节压缩为一个章节。此外，我拓展了字符串章节，介绍正则表达式。\n",
    "\n",
    "少数章节使用turtle图形模块。在之前的版本中我使用python的`turtle`模块，不幸的是它与Jupyter笔记不兼容。因此我使用新的turtle模块，更易于使用。\n",
    "\n",
    "最后，我重新写了文本中的大部分，对不够简洁的地方进行了删减。\n",
    "\n",
    "我对这个新版本非常骄傲，我希望你喜欢它！"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 开始学习\n",
    "\n",
    "对于包括python在内的许多编程语言,有许多可以用来编写和运行程序的工具。这些工具叫作集成开发环境（IDEs）。总体而言，有两种IDEs：\n",
    "\n",
    "- 有些IDEs处理包括代码的文件，它们提供编辑和运行这些文件的工具；\n",
    "- 其他IDEs主要处理Jupter notebooks，同时包含文本和代码。\n",
    "\n",
    "对于初学者，我推荐使用类似Jupyter的笔记开发环境开始学习。\n",
    "\n",
    "本书的笔记可以在在线仓库<https://allendowney.github.io/ThinkPython>获取。\n",
    "\n",
    "有两种使用这些笔记的方法：\n",
    "\n",
    "- 你可以下载笔记并在你自己的电脑上运行。这种情况下你需要安装python和jupyter,这并不难，但如果你想要学习python,花费大量实践安装软件可能令人沮丧；\n",
    "- 可选方式是在Colab上运行笔记。Colab是运行在网络浏览器上的Jupyter环境，你无须安装任何东西。Colab由Google运营，免费使用。\n",
    "\n",
    "如果你刚开始学习，我强烈建议从Colab开始。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 教师资源\n",
    "\n",
    "如果你是本书的作者，一些是可能对你有用的资源：\n",
    "\n",
    "- 你可以在<https://allendowney.github.io/ThinkPython>找到包含练习答案的笔记，以及以下额外资源的链接。\n",
    "- 每章测验和全书的汇总测验可以在[即将到来]中找到。\n",
    "- *教授和学习jupyter*是在课堂高效使用jupyter的在线书籍，你可以在<https://jupyter4edu.github.io/jupyter-edu-book>阅读。\n",
    "- 最佳的教学方式是实时编程，教师书写代码，学生在自己的笔记本中跟随。要了解实时编程（以及其他编程教学的建议），我推荐The Carpentries提供的<https://carpentries.github.io/instructor-training>内容。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 致谢\n",
    "\n",
    "十分感谢Jeff Elkner将我的Java书籍改写为Python，让这个项目启动，并向我介绍了我最终最爱的语言。也感谢Chris Meyers贡献了关于*像计算科学家一样思考*的部分章节。\n",
    "\n",
    "感谢开发GNU免费文档协议的自由软件联盟（Free Software Foundation）让我和Jeff及Chris的合作成为可能，也感谢我现在使用的知识共享组织提供的协议。\n",
    "\n",
    "感谢我使用的python语言及库（包括Turtule图形模块）的开发者和维护者；感谢我用来开发本书的工具，包括jupyter和JupyterBook；以及感谢我使用的服务，包括ChatGPT，Copilot，Colab，Github。\n",
    "\n",
    "感谢Lulu的编辑对*像计算科学家一样学习*部分的工作，以及O'Reilly Media的编辑对*Think Python*部分的工作。\n",
    "\n",
    "特别感谢第2版的技术评审，Melissa Lewis 和 Luciano Ramalho，以及第3版的Sam Lau 和 Luciano Ramalho (再次感谢!)。我也十分感谢Luciano开发的turtle图形模块（jupyturtle）。\n",
    "\n",
    "感谢所有试用本书早期版本的所有学生以及提供纠正和建议的贡献者。在过去几年，超过100个目光敏锐，深思熟虑的读者向我提供了建议和纠正。这些贡献者以及对本项目的热情提供了巨大帮助。\n",
    "\n",
    "如果你有相关建议或者刊误内容，请发送邮件到`feedback@thinkpython.com`。如果你包含了错误出现的句子的一部分，将让我的搜索更加简单。页数和章节数也很有好，但不太方便处理。感谢你的反馈！"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n",
    "\n",
    "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n",
    "\n",
    "代码协议: [MIT License](https://mit-license.org/)\n",
    "\n",
    "文本协议: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
